package com.shoppingmall.controller.backstage;

import com.google.common.collect.Maps;
import com.shoppingmall.common.ServletResponse;
import com.shoppingmall.pojo.Product;
import com.shoppingmall.pojo.User;
import com.shoppingmall.service.ProductService;
import com.shoppingmall.utils.FtpUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * Created by
 * 管理员用户进行商品管理的操作   后台管理员可以查看到所有的商品，不需要验证是否上架
 * @author touni
 * @date 2019/3/19
 * @time 18:12
 */
@RestController
@RequestMapping("/manager/product")
public class ManagerProductController {

    @Autowired
    private ProductService productService;

    private final static Logger logger = LoggerFactory.getLogger(ManagerProductController.class);

/*

    */
/**
     * 获取FTP服务器的相关的信息
     *//*

    @Value("${FTP_ADDRESS}")
    private String FTP_ADDRESS;
    @Value("${FTP_PORT}")
    private Integer FTP_PORT;
    @Value("${FTP_USERNAME}")
    private String FTP_USERNAME;
    @Value("${FTP_PASSWORD}")
    private String FTP_PASSWORD;
    @Value("${FTP_BASE_PATH}")
    private String FTP_BASE_PATH;
    @Value("${IMAGE_BASE_URL}")
    private String IMAGE_BASE_URL;
*/





    /**
     * 存储用户的session的名称
     */
    @Value("${USER_SESSION}")
    private String userSessoin;

    /**
     * 管理员用户查看所有的商品
     * @param pageNum
     * @param pageSize
     * @return
     */

    @RequestMapping("/list")
    public ServletResponse listAllProduct(
                            HttpSession session,
                            @RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum,
                            @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize){
        //首先进行权限验证
        User userFromSession = (User)session.getAttribute(userSessoin);
        if (null == userFromSession || 0 != userFromSession.getRole()){
            return ServletResponse.createByErrorMessage("用户未登录或者用户非管理员");
        }
        return productService.listAllProduct(pageNum,pageSize);
    }


    /**
     * 可以根据产品ID或者是产品名称查询商品
     * @param productName
     * @param productId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping("/search")
    public ServletResponse listProductByProductNameOrProductId(
            HttpSession session,
            String productName,Integer productId,
            @RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum,
            @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize){
        // todo  用户权限验证

        //先校验是否有productname和productid   如果都没有直接跟list中的逻辑一样
        if (StringUtils.isBlank(productName) && null == productId){
            return productService.listAllProduct(pageNum,pageSize);
        }
        return productService.listProductByProductNameOrProductId(productName,productId,pageNum,pageSize);
    }


  /*  *//**
     * 图片上传功能   使用ftputil工具类   直接在controller中实现
     *
     * 需要返回的是状态status  和图片的URL
     * @return
     *//*
    // todo test 待测试
    @RequestMapping("/upload")
    public Map uploadPic(MultipartFile multipartFile){
        //获取图片的名称
        String filename = multipartFile.getOriginalFilename();
        //获取图片的后缀名
        String fileExtendName = filename.substring(filename.lastIndexOf(".")+1);
        //生成新的文件的名称
        String remoteFileName = UUID.randomUUID()+"."+fileExtendName;
        //生成远程服务器的图片的存放位置，默认安装 年/月/日 +图片名称存储
        String remoteBaseSavePath = "/"+new SimpleDateFormat("yyyy").format(new Date())+"/"+
                new SimpleDateFormat("MM").format(new Date())+"/"+new SimpleDateFormat("dd").format(new Date());
        //使用工具类进行上传
        boolean flag = false;
        try {
            flag = FtpUtil.uploadFile(FTP_ADDRESS, FTP_PORT, FTP_USERNAME, FTP_PASSWORD, FTP_BASE_PATH, remoteBaseSavePath, remoteFileName, multipartFile.getInputStream());

        } catch (IOException e) {
            logger.info("文件上传失败！！",e);
            e.printStackTrace();
        }
        HashMap<String, Object> resultMap = Maps.newHashMap();
        if (flag){
            resultMap.put("status",0);
            resultMap.put("url",IMAGE_BASE_URL+remoteBaseSavePath+remoteFileName);
        }
        resultMap.put("status",1);
        resultMap.put("error","图片上传失败");
        return resultMap;
    }*/


    /**
     * 根据商品的ID来查询商品的详细信息
     * @param productId
     * @return
     */
    @RequestMapping("/detail")
    public ServletResponse getProductDetail(Integer productId){
        // todo 用户权限验证

        //验证这个数据是否有
        if (null == productId){
            return ServletResponse.createByErrorMessage("参数错误，请查证后尝试");
        }

        return productService.getProductDetail(productId);
    }


    /**
     * 此处设定为上架为1  下架为0
     * 设置商品的上下架状态
     * @param productId
     * @param status
     * @return
     */
    @RequestMapping("/set_sale_status")
    public ServletResponse setSaleStatus(Integer productId,Integer status){
        // todo 用户权限验证
        //验证参数是否有误
        if (null == productId || null ==status ||(status>1 & status<0)){

            return ServletResponse.createByErrorMessage("参数有误请重试");
        }


        return productService.setSaleStatus(productId,status);
    }

    /**
     * 用于修改商品或者新增加商品
     * @param product
     * @return
     */
    @RequestMapping("/save")
    public ServletResponse saveOrUpdateProduct(Product product){
        //TODO 用户权限验证
        //进行参数验证  如果有误则直接返回错误
        if (null == product || null == product.getCategoryId()
                || null == product.getName() || null == product.getPrice()
                   || null == product.getStock()){
            return ServletResponse.createByErrorMessage("参数有误！！");
        }

        return productService.saveOrUpdate(product);
    }

    /**
     * 没有实现
     * 主要用于富文本编辑器上传图片使用
     * @return
     */
    @RequestMapping("/richtext_img_upload")
    public ServletResponse editToolUploadPic(){
        //  富文本编辑器上传图片与上面的基本一致，但是具体返回值需要根据不同编辑器的要求来进行返回
        return null;
    }



























}
